<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript">
        function fun(a,b) {
            console.log("a = "+a);
            console.log("b = "+b);
            //alert(this);
        }

        var obj = {
            name: "obj",
            sayName:function(){
                alert(this.name);
            }
        };

        /*
         * call()和apply()
         * 	- 这两个方法都是函数对象的方法，需要通过函数对象来调用
         * 	- 当对函数调用call()和apply()都会调用函数执行
         * 	- 在调用call()和apply()可以将一个对象指定为第一个参数
         * 		此时这个对象将会成为函数执行时的this
         * 	- call()方法可以将实参在对象之后依次传递
         * 	- apply()方法需要将实参封装到一个数组中统一传递
         *
         * 	- this的情况：
         * 		1.以函数形式调用时，this永远都是window
         * 		2.以方法的形式调用时，this是调用方法的对象
         * 		3.以构造函数的形式调用时，this是新创建的那个对象
         * 		4.使用call和apply调用时，this是指定的那个对象
         */

        //fun.call(obj,2,3);
        fun.apply(obj,[2,3]);



        var obj2 = {
            name: "obj2"
        };

        /*fun.apply();
        fun.call();
        fun();*/

        //fun.call(obj);
        //fun.apply(obj);

        //fun();

        //obj.sayName.apply(obj2);
    </script>
</head>

<body>
</body>

</html>